iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

假設要設計雲端載具系統,基本上會有會員資料、發票資料去紀錄資料。但其中的發票資料,我認為至少要用三張表格去儲存,分別為手動輸入的發票、財政部查詢的正確發票及購買細項。而會員資料假設我們已經創建好名稱為 user。

  1. 手動發票:

表格名稱:invoice_manual

Private key Foreign key Field Type Description Source Required Default Ref ENUM Error Msg
✅ invoicesManual_id string 系統產手動發票 Id
✅ userId string userId 前端 ☑ user
save_type string 存入方式 前端 Barcode、QRcode
invNum string 發票號碼 前端 ☑
invDate string 發票日期 前端 ☑
random_number string 隨機碼 前端
encrypt string QRcode 驗證 前端
sellerId string 賣家統一編號 前端
status string 狀態碼 後端改 審查中 審查中/未通過/已通過
  1. 正確發票(包含紙本發票、載具發票)

名稱:invoice

Private key Foreign key Field Type Description Source Required Default Ref ENUM Error Msg
✅ invoice_id string 系統產發票 Id
✅ userId string userId 原本就有 ☑ user
save_type string 存入方式 原本就有 ☑ Barcode、QRCode、Carrier
random_number string 隨機碼 原本就有 Barcode、QRCode 需要
invNum string 發票號碼 財政部 ☑
cardNo string 載具條碼 財政部 ☑ 有可能因為是跨境會變成 email
cardType string 卡別 財政部 ☑ 5G0001:跨境、3J0002:手機、1K0001:悠遊卡、2G0001:iCash
sellerName string 賣家名稱 財政部 ☑
invStatus string 發票狀態 財政部 ☑ 查詢中/已確認
invDonatable boolean 可否捐贈
☑
amount float 購買總金額 財政部 ☑
invPeriod string 發票期別 財政部 ☑
donateMark boolean 是否捐贈 財政部 ☑
invDate string 發票日期 財政部 ☑
sellerBan string 賣家統一編號 財政部 ☑
sellerAddress string 賣家地址 財政部 ☑
invoiceTime string 發票時間 財政部 ☑
buyerBan string 買家統一編號 財政部 ☑
currency string 幣別 財政部 ☑
  1. 購買細項

名稱:item

Private key Foreign key Field Type Description Required Default Ref ENUM Error Msg
✅ Item_id string 系統產細項 Id
✅ invoice_id string 發票 Id invoice
description string 細項名稱
quantity float 數量
unitPrice float 單價
amount float 小計
ItemId invoiceId description quantity unitPrice amount
AAAAAA 1 Subscription 1 390 390
BBBBBB 2 義美無加糖厚濃高纖黑豆奶 2 32 64
CCCCC 2 低溫促 1 0 -12

大概需要設計包含這幾項表格,但我認為使用關聯式設計發票資料有點複雜,如果要列出所有發票細項,要再去查詢另外一張表格。

用關聯式資料庫的時候,不但要先定義好所有的資料格式,並且在存入的時候也要事先定義好所有資料庫欄位,如下程式碼。

# 寫入 Invoice
new_invoice = Invoice(
    fb_id=inv.fb_id,
    invoice_manual_id=inv.invoiceManual_id,
    save_type=inv.save_type,
    invNum=response["invNum"],
    sellName=response["sellerName"],
    invStatus=response["invStatus"],
    invDonatable=False,
    amount=response["amount"],
    invPeriod=response["invPeriod"],
    donateMark=False,
    invDate=response["invDate"],
    sellerBan=response["sellerBan"],
    sellerAddress=response["sellerAddress"],
    invoiceTime=response["invoiceTime"],
    buyerBan=response["buyerBan"],
    currency=response["currency"],
    random_number=inv.random_number,
    status="審查中",
    gov_status="排程執行成功",
    error_msg="",
)
session.add(new_invoice)
session.commit()

往後要改動資料庫欄位需要亦要做資料庫遷移,我認為以小型專案的快速開發而言,可以先考慮用非關聯式資料庫比較好寫,明天將會說明如何改用 MongoDB 設計。


上一篇
Day 12:如何用 docker 架設 FastAPI
下一篇
Day 14:用 MongoDB 設計 - 紙本電子發票
系列文
透過 python 建立發票系統 - 自己的發票自己查 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言